<?php //2017-06-29
/*#魔术常量 
__LINE__   文件中的当前行号。  
__FILE__   文件的完整路径和文件名。如果用在被包含文件中，则返回被包含的文件名。自 PHP 4.0.2 起， __FILE__  总是包含一个绝对路径（如果是符号连接，则是解析后的绝对路径），而在此之前的版本有时会包含一个相对路径。  
__DIR__   文件所在的目录。如果用在被包括文件中，则返回被包括的文件所在的目录。它等价于 dirname(__FILE__)  。除非是根目录，否则目录中名不包括末尾的斜杠。（PHP 5.3.0中新增） =  
__CLASS__   类的名称（PHP 4.3.0 新加）。自 PHP 5 起本常量返回该类被定义时的名字（区分大小写）。在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域（例如 Foo\Bar  ）。注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。当用在 trait 方法中时，__CLASS__ 是调用 trait 方法的类的名字。  
__METHOD__   类的方法名（PHP 5.0.0 新加）。返回该方法被定义时的名字（区分大小写）。  

#魔术方法
__isset() 检测对象里面的私有成员属性是否存在 
__unset() 是个共有的方法，用来删除对象里的私有成员属性 
__get() 获取对象未定义的属性时，自动运行的魔术函数
__set()  给未定义的属性赋值时，自动运行的魔术函数。可以将set设置的未定义属性存到类的数组类型成员属性，get时再找相应变量索引
__call() 调用一个未定义的方法时，自动执行的魔术函数，2个参数 1方法名 2参数数组 
__autoload($className) 引用一个类时自动执行的函数，可以读入类文件，可以通过 spl_autoload_register(array('a','run')); 来指定新的魔术函数 */

//LINE行列
$a = __LINE__;
var_dump($a);

var_dump(__FILE__); //C:\wamp\www\yuephp\03-15\moshu.php

var_dump(__DIR__); //C:\wamp\www\yuephp\03-15

/**
* 
*/
class Moshu
{   
	//public $arr;
	//public $color;
	//public $c;
	public function bian($value='')
	{
		var_dump(__CLASS__);
		//METHOD方法
		var_dump(__METHOD__);
	}
	public function __get($name)
	{
		echo "__get未找到属性$".$name.'<br>';
	}
	public function __set($name,$value) //要设置的属性名和值  必须两个同时存在
	{
		echo "__set您设置的属性$".$name."不存在，值为".$value.'<br>';
	}
	public function __isset($name)
	{
		echo "__isset检测到属性$".$name.'未设置<br>';
	}
	public function __unset($name)
	{
		echo "__unset检测到你在删除不存在的属性$".$name.'<br>';
	}
	public function __call($name,$data) //函数名和调用时传入的参数  $data要为数组  必须两个同时存在 
	{
		echo "__call检测到你在调用的方法$".$name.'不存在<br>';
	}
}

$o = new Moshu();

$o->bian();

echo $o->name; //__get

$o->arr="123"; //若没有__set则是在内存中赋值arr脚本执行完就消失了,并不会在代码中赋值,因此不可用

isset($o->color); //有__isset时,当执行isset检测变量未设置,会自动执行__isset函数,若没有__isset时,则只返回布尔

unset($o->c); //有时类并不是只有你一个人用，删除不存在的属性__unset就能做出提示

$o->bucunzai('123'); //调用不存在的方法时,__call会做出提示


function __autoload($classname)
{	
	$names = array(
		"./".$classname.".class.php",
		"./Zd/".$classname.".class.php"
		);
	foreach ($names as $name) {
		if(file_exists($name)) {
			echo "<br>";
			include_once $name;
			break;
		}
		
	}
	
}

$obj = new Haiyang();

$obj->liu("海水会流");

$obj1 = new Zd();




 ?>